"""
腐蚀和膨胀 是 形态学变换的基本操作，针对的是二值化图像中形状
腐蚀：分离边缘，分割图像，白色区域变瘦了    【卷积核和被覆盖区域相乘，取min】
膨胀：去除噪点，白色区域变胖了 【取max】
它们两个是相反操作
"""
import cv2

img = cv2.imread("../images/02.png")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, img_binary = cv2.threshold(
    img_gray,
    127,
    255,
    cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU
)

cv2.imshow("img_binary", img_binary)
cv2.waitKey(0)

# 1. 腐蚀
"""
- 矩形 0（cv2.MORPH_RECT）
- 椭圆形 2（cv2.MORPH_ELLIPSE）
- 十字形 1（cv2.MORPH_CROSS）
"""
kernel_1 = cv2.getStructuringElement(0, (15, 15))
img_erode = cv2.erode(img_binary, kernel=kernel_1)
cv2.imshow("img_erode", img_erode)
cv2.waitKey(0)

# 2. 膨胀
kernel_2 = cv2.getStructuringElement(0, (19, 19))
img_dilate = cv2.dilate(img_binary, kernel=kernel_2)
cv2.imshow("img_dilate", img_dilate)
cv2.waitKey(0)

# 3. 先膨胀再腐蚀 —— 高级形态学变换：闭运算
img_dilate_erode = cv2.erode(img_dilate, kernel=kernel_1)
cv2.imshow("img_dilate_erode", img_dilate_erode)
cv2.waitKey(0)